home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / web / spiderweb / fixes-to-be-applied / latex / web.doc (.txt) < prev    next >
LaTeX Document  |  1992-06-10  |  36KB  |  889 lines

  1. \iffalse
  2. %% Copyright D.Love, SERC Daresbury Laboratory, 1991
  3. %% The `doc' version of this style is re-distributable and usuable
  4. %% under conditions of the GNU copyleft, but please mark any changes,
  5. %% list them here and report any major enhancements to the author.
  6. % This is a self-documenting style.  To produce the documentation you
  7. % might use a driver file like this:
  8. % \def\webmacs{null} \documentstyle[a4,makeidx,newdoc,web]{article}
  9. % \EnableCrossrefs \CodelineIndex
  10. % \begin{document} \DocInput{web.sty} \PrintIndex
  11. % \end{document}
  12. % and run `makeindex -s gind.ist doc' in between passes.  You need
  13. % Mittelbach's newdoc.sty at v1.6d or later.
  14. % To produce the .sty file use `latex docstrip' to remove most of the
  15. % comments.  Please don't distribute the .sty file without the .doc
  16. % file. 
  17. \iffalse %  hack RCS info into a sensible form:
  18. \def\next$#1: #2/#3/#4 #5 ${\def\filedate{#4/#3/#2}\def\filetime{#5}}
  19. \next$Date: 91/03/06 15:27:01 $
  20. \def\next$#1: #2 ${\def\fileversion{#2}}
  21. \next$Revision: 1.3 $
  22. % \title{A a \web{} style file for \LaTeX{}\thanks{This file is version
  23. % \fileversion\ of \filedate}}
  24. % \author{David Love\\[2ex]{\it SERC Daresbury Laboratory, Warrington
  25. % WA4 4AD, UK}\\ \tt d.love@daresbury.ac.uk}
  26. % \date{}
  27. % \newcommand{\web}{{\tt WEB}}
  28. % \newcommand{\weave}{{\tt WEAVE}}
  29. % \newcommand{\tangle}{{\tt tangle}}
  30. % \newcommand{\spider}{Spider}
  31. % \MakeShortVerb{\"}
  32. % \DoNotIndex{\/,\@date,\@ifundefined,\@makefnmark,\@starttoc}
  33. % \DoNotIndex{\@topnum,\addpenalty,addvspace,\advance,aftergroup}
  34. % \DoNotIndex{\begin,\begingroup,\bgroup,\char,\def,\egroup,\else,\end}
  35. % \DoNotIndex{\endgroup,\fi,\fnsymbol,\hfil,\hfill,\hfilneg,\hss,\kern}
  36. % \DoNotIndex{\let,\lineskip,\newcommand,\protect,\qquad,\quad,\relax}
  37. % \DoNotIndex{\thanks,\thefootnote,\z@,\@M,\@thanks,\@thefnmark,\hbox}
  38. % \DoNotIndex{\empty,\mbox}
  39. % \maketitle
  40. % \begin{abstract} \noindent
  41. % This style file is for use with a version of the Spidery \weave\ system
  42. % that has been adapted to use \LaTeX\ rather than plain \TeX\ for the
  43. % formatting.  It is a first attempt.
  44. %  \end{abstract}
  45. % \section{Assumptions of \weave{} and the {\tt .web} file}
  46. % We assume we're using the version of Spidery \weave{} \cite{spider}
  47. % changed for \LaTeX\@.  This will write out
  48. % \begin{quote}"\def\webmacs{"\meta{ext}"web.tex}",\end{quote}
  49. % (where \meta{ext} is
  50. % the \spider{} {\tt extension}), then the limbo section, then
  51. % \begin{quote}"\begin{document}\maketitle" \end{quote}
  52. % the latter to stop you forgetting it.  The "\webmacs" file will be
  53. % included at the end of this style.
  54. % After the index (if any), we get
  55. % "\end{document}".  The user thus has to put the "\documentstyle"
  56. % command in the limbo part and include "web" in the style options to
  57. % get this stuff and can use other options as appropriate.  You're
  58. % meant to use the "article" main style, although I think "report"
  59. % would work too.
  60. % \section{Strategy}
  61. % The idea was to change the original \spider{} \TeX{} stuff as little
  62. % as possible, although it has actually been changed quite
  63. % substantially.  Changes are forced where there is a clash of macro 
  64. % names; most of the original one-character control sequences are
  65. % already used by \LaTeX, for instance.  Some features have been
  66. % converted to a \LaTeX{} equivalent, 
  67. % notably the table of contents mechanism, the title page, running
  68. % header and double-columning for the index.  For safety, "\def"s have
  69. % been replaced by "\newcommands" where possible since there are
  70. % probably plenty of possibilities for name clashes.
  71. % User-visible differences from the plain version are given in
  72. % appendix~\ref{changes}.
  73. % \section{Use with old webs}
  74. % Examples of the use of this style with old webs using the plain
  75. % conventions can be found in the accompanying changes files for
  76. % {\tt weave.web} and {\tt spider.web}.  You can use the limbo section
  77. % to check whether the generated ".tex" file is being run through
  78. % \LaTeX\ or plain \TeX\ by doing something like this:
  79. % \begin{quote}
  80. % \begin{verbatim}
  81. % \ifx\enddocument\undefined
  82. %   % plain things
  83. % \else
  84. %   % LaTeX things
  85. % \fi
  86. % \end{verbatim}
  87. % \end{quote}
  88. % \section{Bugs}
  89. % Floats
  90. % don't always come out where you'd expect due to interaction with
  91. % \web's attempts to keep all of a module on one page if possible.
  92. % "\str" and "\vstr", which 
  93. % might well get used in a moving argument, are 
  94. % fragile.  Module titles (after "@*") are moving arguments.  I think
  95. % if you use \web's "|"\dots"|" construction in a 
  96. % moving argument it will break and there's not much you can do about
  97. % it. 
  98. % \section{Code}
  99. % \subsection{Preliminaries --- page layout}
  100. % Let's announce ourselves as usual:
  101. %    \begin{macrocode}
  102. \typeout{Sub-style `web', version \fileversion\space of \filedate}
  103. %    \end{macrocode}
  104. % We don't want stretch between paragraphs.
  105. %    \begin{macrocode}
  106. \parskip \z@ 
  107. %    \end{macrocode}
  108. % \begin{macro}{\textwidth}\begin{macro}{\textheight}
  109. % \begin{macro}{\oddsidemargin} \begin{macro}{\evensidemargin}
  110. % The default page width should be large for \web\@.  This is for
  111. % non-Americans (A4)---if you want to alter the page dimensions with a
  112. % suitable style option put it {\em after\/} "web" in the
  113. % "\documentstyle" list.  The width here is too big for decently
  114. % readable text, but is
  115. % still less than the $6.5''$ of the original.  Note that there's no
  116. % point in trying to use "\marginpar" at
  117. % this width since the margins have disappeared!  The "twoside" option
  118. % will work sensibly if you care to use it.\DescribeMacro{twoside}  We
  119. % want to avoid doing this when typesetting the documenttation, hence
  120. % the test for "\DocInput".
  121. %    \begin{macrocode}
  122. \ifx\DocInput\undefined
  123. \ifcase \@ptsize
  124.    \textheight = 53 \baselineskip
  125.    \textheight = 47 \baselineskip
  126.    \textheight = 43 \baselineskip
  127. \fi  \advance \textheight by \topskip
  128. \textwidth=6.27in  \oddsidemargin=\z@  \evensidemargin=\z@
  129. %    \end{macrocode}
  130. % \end{macro}\end{macro}\end{macro}\end{macro}
  131. % We use the "myheadings" page style with headings containing section
  132. % information (see below).
  133. %    \begin{macrocode}
  134. \pagestyle{myheadings}
  135. %    \end{macrocode}
  136. % If we start off with a "\sectionmark" we won't miss the running
  137. % header off the first page where it should appear.
  138. %    \begin{macrocode}
  139. \ifx\DocInput\undefined \sectionmark{1} \fi
  140. %    \end{macrocode}
  141. % \subsubsection{Font selection}
  142. % \begin{macro}{\normal@font}
  143. % We have to check whether we're in the old or new font selection scheme
  144. % and set up appropriately.  "\normal@font" is invoked before the font
  145. % changes for identifiers, reserved words and strings to make sure
  146. % that they use the default series and shape in the new scheme.  This
  147. % is actually only necessary if "\id", "\res" or "\str" is used in
  148. % \TeX\ text that is being set in a different shape or series, not
  149. % normally in the code.  If you use the new selection scheme you can
  150. % do things like using Concrete or PostScript fonts easily.
  151. %    \begin{macrocode}
  152. \@ifundefined{selectfont}{%
  153.      \let\normal@font=\relax}   % old scheme
  154.    {% new scheme
  155.      \def\normal@font{\series \mediumseriesdefault 
  156.      \shape \normalshapedefault}}
  157. %    \end{macrocode}
  158. % \end{macro}
  159. % \subsection{Front matter}
  160. % We depart from the plain version here.  The first page (or pages, if
  161. % the contents are very long) is produced with the "titlepage"
  162. % environment.  The "\author", "\date" and
  163. % "\title" \DescribeMacro{\title} can be specified
  164. % as usual in \LaTeX\@.  Note that you now say
  165. % "\title{"\meta{title}"}" rather than "\def\title{"\meta{title}"}" as
  166. % in the plain version and this title will be used in the running
  167. % header. 
  168. % \begin{macro}{\@maketitle}
  169. % We'll re-define "\@maketitle" to include the "\topofcontents" and
  170. % "\botofcontents" information, with the contents information in the
  171. % middle.  The normal title, author and date will be put automatically
  172. % at the top---"\topofcontents" is extra.  You get the titling and
  173. % contents information automatically, since "\maketitle" is inserted
  174. % by \weave{} immediately after "\begin{document}".  If you want to
  175. % suppress it, "\let\maketitle=\relax" in the limbo part.
  176. % Of course, you have to make two
  177. % passes to get the contents printed, unlike the original plain
  178. % system.  This should not be much hardship as one usually reckons on
  179. % running \LaTeX{} at least twice.  (Putting the titlepage at the back
  180. % won't help, since the ".toc" file only exists after the ".aux" file
  181. % has been read on the secind pass.  One could change the standard
  182. % behaviour so that the ".toc" file was created at the end of the
  183. % first pass, I guess.)
  184. % We first test for "\DocInput" as above to
  185. % avoid messing things up when typesetting the documentation.
  186. %    \begin{macrocode}
  187. \ifx\DocInput\undefined
  188. \def\@maketitle{%
  189.   \newpage  \thispagestyle{empty} \null
  190.   \begin{center}
  191.   {\LARGE \@title \par}  \vskip 1.5em
  192.   {\large   \lineskip .5em
  193.     \begin{tabular}[t]{c} \@author  \end{tabular} \par}                   
  194.   \vskip 1em  {\large \@date}
  195.   \end{center}
  196.   \par   \vskip 1.5em
  197.   \topofcontents  \tableofcontents  \par  \botofcontents \newpage }
  198. %    \end{macrocode}
  199. %    \end{macro}
  200. % \begin{macro}{\maketitle}
  201. % We change "\maketitle" to avoid the "\thispagestyle{plain}" that it
  202. % otherwise contains, to set the page number to 1 at the end and to
  203. % avoid losing the definitions of "\@title" and "\@author".
  204. % ("\@title" is used in the running header.)
  205. %    \begin{macrocode}
  206. \ifx\DocInput\undefined
  207. \def\maketitle{%
  208.   \par \begingroup
  209.     \def\thefootnote{\fnsymbol{footnote}}
  210.     \def\@makefnmark{\hbox to \z@ {$^{\@thefnmark}$\hss}}   
  211.     \if@twocolumn  \twocolumn[\@maketitle]   
  212.     \else  \newpage  \global\@topnum\z@  \@maketitle  \fi
  213.     \@thanks
  214.   \endgroup
  215.   \setcounter{footnote}{0}  \setcounter{page}{1}
  216.   \let\maketitle\relax  \let\@maketitle\relax
  217.   \gdef\@thanks{}\let\thanks\relax}
  218. %    \end{macrocode}
  219. %    \end{macro}
  220. % \begin{macro}{\@title} \begin{macro}{\@author}
  221. % We better define these in case they're not supplied:
  222. %    \begin{macrocode}
  223. \let\@title=\empty  \let\@author=\empty
  224. %    \end{macrocode}
  225. %    \end{macro}    \end{macro}
  226. % \begin{macro}{\tableofcontents}
  227. % "\tableofcontents" is re-defined to produce a header saying
  228. % ``Section'' and ``Page'' a bit like the plain version, although the
  229. % section number is at the left.
  230. %    \begin{macrocode}
  231. \def\tableofcontents{%
  232.   \noindent Section \hfill Page \par  \@starttoc{toc}}
  233. %    \end{macrocode}
  234. %    \end{macro}
  235. % \begin{macro}{\topofcontents} \begin{macro}{\botofcontents}
  236. % The "\topofcontents" material that comes between the title\slash author
  237. % information and the contents list and the "\botofcontents" stuff
  238. % that comes after the contents list are empty initially.  I'm not
  239. % sure it's worth preserving them.
  240. %    \begin{macrocode}
  241. \def\topofcontents{}  \def\botofcontents{}
  242. %    \end{macrocode}
  243. %    \end{macro}    \end{macro}
  244. % \begin{macro}{\ttitlefont} \begin{macro}{\titlefont}
  245. % These are just for compatibility with the plain version---they
  246. % should probably go.
  247. %    \begin{macrocode}
  248. \let\ttitlefont=\tt  \let\titlefont=\rm
  249. %    \end{macrocode}
  250. %    \end{macro}    \end{macro}
  251. % \subsection{Prettyprinting stuff}
  252. % \subsubsection{Identifiers, reserved words and strings}
  253. %    \begin{macro}{\id}\begin{macro}{\ida}\begin{macro}{\idfont}
  254. % Multi-letter identifiers are set by the macro "\id" in font "\idfont",
  255. % which is italic by default i.e., \id{identifier}.
  256. % One-letter identifiers are
  257. % actually set by "\ida" in math italic as they are supposed to look
  258. % better that way (\ida{a} rather than \id{a}).
  259. %    \begin{macrocode}
  260. \newcommand{\id}[1]{\mbox{\idfont #1\/\kern.05em}}
  261. \newcommand{\ida}[1]{\mbox{$ #1 $}}
  262. \newcommand{\idfont}{\normal@font \it}
  263. %    \end{macrocode}
  264. %    \end{macro}    \end{macro}    \end{macro}
  265. %    \begin{macro}{\reservedfont}\begin{macro}{\res}
  266. %  Reserved words are set by macro "\res", using "\reservedfont" which
  267. %  is bold by default i.e., \res{reserved}.
  268. %    \begin{macrocode} 
  269. \newcommand{\reservedfont}{\normal@font \bf}
  270. \newcommand{\res}[1]{\mbox{\reservedfont#1\/}}
  271. %    \end{macrocode}
  272. %    \end{macro}\end{macro}
  273. %    \begin{macro}{\str}
  274. % Typewriter type is used for strings, set by "\str" i.e.,
  275. % \str{string}.  The definitions of the escaped characters 
  276. % are given below.  I don't understand why the ampersand is treated
  277. % like this, since "\&" is defined anyway, but quotes and "^" are
  278. % escaped to avoid 
  279. % ligatures.\footnote{{\tt \char`\^} and {\tt \char`\~} form ligatures
  280. % in PostScript virtual fonts as well as "'".}  It's necessary to do a
  281. % "\def" of "\^" rather than just 
  282. % "\let\^\CF" to avoid an error with the use of "\^" not matching its
  283. % definition.   Note the use of "\@tempa" below rather than "\XX" as
  284. % used in the same situation elsewhere---using "\XX", "\str" breaks if
  285. % it is used in, say, a comment.
  286. %    \begin{macrocode} 
  287. \def\str#1{%
  288.   \ifmmode \gdef\@tempa{\null$\null}\else \gdef\@tempa{}\fi
  289.   \@tempa {%
  290.   \let\\=\BS  \let\'=\RQ  \let\`=\LQ  \let\{=\LB  \let\}=\RB
  291.   \let\~=\TL  \let\ =\SP  \let\&=\AM  \def\^{{\tt \char`\^}}%
  292.   \leavevmode \normal@font\tt #1}\@tempa}
  293. %    \end{macrocode}
  294. %    \end{macro}
  295. % \begin{macro}{\AM} \begin{macro}{\BS} \begin{macro}{\LB}
  296. % \begin{macro}{\LQ} \begin{macro}{\RB} \begin{macro}{\UL}
  297. % \begin{macro}{\TL}
  298. % Here are the definitions of the control sequences for strings.  The
  299. % plain version redefined "\#", "\$", "\%" and "\^" globally.  "\$"
  300. % isn't used by awk or C \web s, and has been removed.  The others are
  301. % done only in code, using "\startcodehook" (below).
  302. %    \begin{macrocode}
  303. \chardef\AM=`\&                 % ampersand
  304. \chardef\BS=`\\                 % backslash
  305. \chardef\LB=`\{                 % left brace
  306. \def\LQ{{\tt\char'22}}          % left quote
  307. \chardef\RB=`\}                 % right brace
  308. \def\RQ{{\tt\char'23}}          % right quote
  309. \def\UL{{\tt\char`\_}}          % underline character in a string
  310. \def\TL{{\tt\char`\~}}          % tilde 
  311. %    \end{macrocode}
  312. %    \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
  313. %    \end{macro}
  314. % \begin{macro}{\SP}
  315. % Strings may be rather long and we want some way of breaking
  316. % them, so
  317. % "\SP" produces a visible space (\str{\SP}) and also adds a discretionary
  318. % break afterwords.  If a break occurs, the line is ended with a
  319. % backslash.  Spaces are probably the most sensible place to break
  320. % strings, especially if they are messages, but one could consider
  321. % doing the same thing for other of the macros above e.g., "\BS" might
  322. % check if the next character was "n" and insert a discretionary break
  323. % after that.
  324. %    \begin{macrocode} 
  325. \newcommand{\SP}{\char`\ \discretionary{\hbox{\char`\\}}{}{}}
  326. %    \end{macrocode}
  327. %    \end{macro}
  328. % \begin{macro}{\vstr}
  329. % This does a verbatim string (from "@=") using the existing \LaTeX
  330. % nology rather than the original definition to put a frame around it
  331. % (\vstr{string}). 
  332. %    \begin{macrocode}
  333. \newcommand{\vstr}[1]{\kern 2pt \fbox{\str{#1}}\kern 2pt}
  334. \setlength{\fboxsep}{2pt}
  335. %    \end{macrocode}
  336. %    \end{macro}
  337. % \begin{macro}{\const}
  338. % This looks after setting octal, hex or decimal constants.  The first
  339. % thing in its argument may be one of the control sequences in the
  340. % example on the left,
  341. % producing the result in the middle:
  342. % \[\begin{tabular}{lll}
  343. % "\const{\$10}" & $\const{\$10}$ & (long) \\
  344. % "\const{\_10}" & $\const{\_10}$ & (power of ten)\\
  345. % "\const{\~10}" & $\const{\~10}$ & (octal) \\
  346. % "\const{\^AB10}" & $\const{\^AB10}$ & (hex) \\
  347. % \end{tabular}\]
  348. % \DeleteShortVerb{\"}
  349. %    \begin{macrocode}
  350. \def\const#1{{%
  351.   \def\?{\kern.2em}%
  352.   \def\${\ell}% long
  353.   \def\_{\RealConstFormat{\aftergroup}}% power of ten
  354.   \def\~{\hbox{\rm \char'23\kern-.2em \it \aftergroup\?\aftergroup}}% octal
  355. %    \end{macrocode}
  356. % The \verb+"+ here was originally \verb+\char'175+ which,
  357. % unfortunately, is different in PostScript virtual fonts and Computer
  358. % Modern: 
  359. %    \begin{macrocode}
  360.   \def\^{\hbox{\rm "\tt \aftergroup}}% hex
  361.   #1}}                          % (\def{\const})
  362. %    \end{macrocode}
  363. %    \end{macro}
  364. % \MakeShortVerb{\"}
  365. %    \begin{macro}{\RealConstFormat}
  366. % I prefer to re-define the decimal style
  367. % to print as the more code-like `$\mbox{\rm e}10$'.  You can
  368. % do this by using the hook "\RealConstFormat" in your Spider "macros"
  369. % section: 
  370. % \begin{quote} "\newcommand{\RealConstFormat}{\mbox{\rm e}}" .\end{quote}
  371. % For a go at a Fortran web, I hacked the lexing so that an "e" or "d" in
  372. % a real or double-precision constant was transmitted verbatim into the
  373. % argument of "\const" instead of "\_" and re-defined "\const" to ensure
  374. % this was set in roman.
  375. %    \begin{macrocode}
  376. \newcommand{\RealConstFormat}{\cdot 10^}
  377. %    \end{macrocode}
  378. %    \end{macro}
  379. % \subsubsection{Indentation and breaks}
  380. % \begin{macro}{\ind}
  381. % This counter stores the current indentation in ems.
  382. %    \begin{macrocode} 
  383. \newcount\ind
  384. %    \end{macrocode}
  385. %    \end{macro}
  386. % \begin{macro}{\bak} \begin{macro}{\bakk}
  387. % These backspace one and two ems respectively.
  388. %    \begin{macrocode} 
  389. \newbox\bak  \setbox\bak=\hbox to \m@ne em{}
  390. \newbox\bakk \setbox\bakk=\hbox to -2em{}
  391. %    \end{macrocode}
  392. %    \end{macro}\end{macro}
  393. % \begin{macro}{\0}
  394. %  A forced break, as from "@/":
  395. %    \begin{macrocode}
  396. \def\0{%
  397.   \ifmmode
  398.     \ifinner$\par\hangindent\ind em\noindent\kern\ind em\ignorespaces$\fi
  399.   \else
  400.     \par\hangindent\ind em\noindent \kern\ind em\ignorespaces 
  401.   \fi}
  402. %    \end{macrocode}
  403. %    \end{macro}
  404. % \begin{macro}{\1}
  405. % Indent one more notch:
  406. %    \begin{macrocode}
  407. \newcommand{\1}{\global\advance\ind by 1 \hangindent\ind em}
  408. %    \end{macrocode}
  409. %    \end{macro}
  410. % \begin{macro}{\2}
  411. % Indent one less notch:
  412. %    \begin{macrocode}
  413. \newcommand{\2}{\global\advance\ind by \m@ne }
  414. %    \end{macrocode}
  415. %    \end{macro}
  416. % \begin{macro}{\3}
  417. %  An optional break within a statement, as from "@|":
  418. %    \begin{macrocode}
  419. \newcommand{\3}[1]{\hfil \penalty#10 \hfilneg}
  420. %    \end{macrocode}
  421. %    \end{macro}
  422. % \begin{macro}{\4}
  423. % Backspace one notch:
  424. %    \begin{macrocode}
  425. \newcommand{\4}{\copy\bak}
  426. %    \end{macrocode}
  427. %    \end{macro}
  428. % \begin{macro}{\5}
  429. % Optional break:
  430. %    \begin{macrocode}
  431. \newcommand{\5}{\hfil \penalty \m@ne  \hfilneg \kern 2.5em \copy\bakk
  432.   \ignorespaces} 
  433. %    \end{macrocode}
  434. %    \end{macro}
  435. % \begin{macro}{\6}
  436. % A forced break with no indentation:
  437. %    \begin{macrocode}
  438. \def\6{\ifmmode \else \par
  439.   \hangindent\ind em\startline \ignorespaces \fi}
  440. %    \end{macrocode}
  441. %    \end{macro}
  442. % \begin{macro}{\startline}
  443. % This is used by "\code" as well as "\6" above.
  444. %    \begin{macrocode}
  445. \def\startline{\noindent \count255=\ind \advance\count255 by -2
  446.   \hskip\count255 em}
  447. %    \end{macrocode}
  448. %    \end{macro}
  449. % \begin{macro}{\7}
  450. %  A forced break and a little extra vertical space, as from "@#": 
  451. %    \begin{macrocode}
  452. \newcommand{\7}{\Y\6}
  453. %    \end{macrocode}
  454. %    \end{macro}
  455. % \begin{macro}{\8}
  456. % No indentation.  It works only in code, not in "|"\dots"|".
  457. %    \begin{macrocode}
  458. \newcommand{\8}{\unskip}
  459. %    \end{macrocode}
  460. %    \end{macro}
  461. % \begin{macro}{\J}
  462. % \tangle's join operation ("@&"):
  463. %    \begin{macrocode}
  464. \newcommand{\J}{\str{@\&}}
  465. %    \end{macrocode}
  466. %    \end{macro}
  467. % \begin{macro}{\C}
  468. % This looks after comments.  The hooks are inserted because comments
  469. % aren't code (see below).
  470. %    \begin{macrocode}
  471. \def\C#1{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi
  472.    \XX \hfil \penalty \m@ne\hfilneg\quad % original spider
  473.    $\commentbegin\,$\endcodehook{#1}\startcodehook$\,
  474.    \commentend$\XX}
  475. %    \end{macrocode}
  476. % \end{macro}
  477. %    \subsection{Modules}
  478. % \begin{macro}{\onmaybe} \begin{macro}{\maybe} \begin{macro}{\ifon}
  479. % These switches are concerned with only printing changed sections if
  480. % so desired.
  481. %    \begin{macrocode}
  482. \def\onmaybe{\let\ifon=\maybe}  \let\maybe=\iftrue  \newif\ifon
  483. %    \end{macrocode}
  484. %    \end{macro}\end{macro}\end{macro}
  485. %    \begin{macro}{\M}
  486. % Beginning of an un-starred section:
  487. %    \begin{macrocode}
  488. \outer\def\M#1.{%
  489.   \MN#1.\ifon\vfil\penalty-100\vfilneg
  490.   \vskip12ptminus3pt \startsection \ignorespaces}
  491. %    \end{macrocode}
  492. % \end{macro}
  493. %    \begin{macro}{\startsection}  \begin{macro}{\lapstar}
  494. % Some auxilliary definitions:
  495. %    \begin{macrocode}
  496. \def\startsection{\Q \noindent {\let\*=\lapstar \bf \modstar.\quad }}
  497. \newcommand{\lapstar}{\rlap{*}}
  498. %    \end{macrocode}
  499. %    \end{macro}    \end{macro}
  500. %    \begin{macro}{\N}
  501. % This introduces a starred section (where "#2" is the title).   We
  502. % have to check the title with "\headcheck" for a leading 
  503. % character indicating a subsection.  Then we write a contents entry,
  504. % change the running header and set the title in bold.  "\old@S" is
  505. % used in the header rather than "\S" since "\S" is probably
  506. % wrongly-defined at this point (see below).
  507. %    \begin{macrocode}
  508. \outer\def\N#1.#2.{%
  509.   \MN#1.\headcheck#2\headcheck
  510.   \typeout{*\modno} % progress report
  511.   \addcontentsline{toc}{\headcheck@type}
  512.     {\hbox to 2em{\modno\hfill} \quad \theopen \relax \themodtitle}
  513.   \markboth{% running headline
  514.     {\protect\small \qquad\uppercase{\ignorespaces\themodtitle}}
  515.       \hfill {\protect\small \@title}\qquad{\rm \old@S \modno}}
  516.     {\rm \old@S \modno\qquad {\protect\small \@title}\hfill
  517.       {\protect\small \uppercase{\ignorespaces\themodtitle\qquad}}}
  518.   \ifon\startsection {\bf \ignorespaces \themodtitle.\quad }\ignorespaces}
  519. %    \end{macrocode}
  520. % \end{macro}
  521. % \begin{macro}{\MN}
  522. % Here is some common code for "\M" and "\N"\@.  Like the normal \LaTeX{}
  523. % "\section", it looks after setting a
  524. % "\sectionmark" and advancing the section counter using
  525. % "\refstepcounter" so that it can be cross-referenced as usual.  It
  526. % looks after the decision about whether or not to set this module if it
  527. % is not starred.
  528. %    \begin{macrocode}
  529. \def\MN#1.{%
  530.   \par {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}}%
  531.   \ifx\modno\modstar \onmaybe \else \ontrue \fi 
  532.   \sectionmark{\modno} \refstepcounter{section}}
  533. %    \end{macrocode}
  534. % \end{macro}
  535. % \begin{macro}{\note} \begin{macro}{\A}
  536. % Auxilliary macros.  "\A" is for cross-references for multiply
  537. % defined section names.
  538. %    \begin{macrocode}
  539. \def\note#1#2.{\Y \noindent {\hangindent 2em \footnotesize
  540.   \baselineskip 10pt#1 #2.\par}}
  541. \newcommand{\A}{\note{See also}}
  542. %    \end{macrocode}
  543. % \end{macro} \end{macro}
  544. % \subsubsection{Processing special section headings}
  545. % This complicated stuff, introduced with \spider{} and modified for the
  546. % \LaTeX{} version, is to allow an inital =, 1, 2, 3 or 4 in 
  547. % starred module titles to indicate a hierarchy.  Their effect is as follows:
  548. % \[ \begin{tabular}{c|c|c}
  549. % Introduction & Page eject? & Indentation in contents\\ \hline
  550. % "@*=" & yes & 0 \\
  551. % "@*1" & yes & 2 em \\
  552. % "@*2" & no  & 2 em \\
  553. % "@*3" & yes & 4 em \\
  554. % "@*4" & no  & 4 em \\
  555. % \end{tabular} \]
  556. % "@*=" also suppresses a following page eject and emboldens the
  557. % table of contents entry and puts some extra vertical space before
  558. % it.  Normal starred sections have no indentation in the contents and
  559. % don't do anything special about page breaks.
  560. % \begin{macro}{\l@part} \begin{macro}{\l@norm} \begin{macro}{\l@num}
  561. % Two new sorts of contents entry are defined here and the `part'
  562. % type re-defined.  (See "latex.tex" for details of how this works.)
  563. % "\l@part" determines the t.o.c.\ entry for a "@*=" section,
  564. % "\l@norm" the entry for a normal starred section and "\l@num" that
  565. % for a numbered section.  Some penalties are inserted (the normal
  566. % values for the main style) in case the t.o.c.\ extends over more
  567. % than one page.  The "\headcheck@type" definition is used in the
  568. % sectioning commands to write the t.o.c.\ entry.
  569. %    \begin{macrocode}
  570. \def\l@part{\addpenalty{\@secpenalty}
  571.    \addvspace{3pt plus 1pt}     % space above part line
  572.    \@dottedtocline{0}{\z@ }{4em}}
  573. \def\l@norm{\addpenalty{\@secpenalty}
  574.    \@dottedtocline{0}{\z@ }{4em}}
  575. \def\l@num{\@dottedtocline{0}{0em}{4em}}
  576. %    \end{macrocode}
  577. % \end{macro}\end{macro}\end{macro}
  578. % \begin{macro}{\ifcancel} \begin{macro}{\ifnextchar}
  579. % \begin{macro}{\ifnch} \begin{macro}{\makethechar}
  580. % Here's the tricky stuff, presented without further comment!
  581. %    \begin{macrocode}
  582. \newif\ifcancel  \cancelfalse
  583. \def\ifnextchar#1#2#3{%
  584.   \let\@tempe=#1\def\@tempa{#2}\def\@tempb{#3}\@ifnch}
  585. \def\@ifnch{%
  586.   \ifx \@tempc \@tempe\let\@tempd\@tempa
  587.   \else \let\@tempd\@tempb
  588.   \fi
  589.   \@tempd}
  590. \def\makethechar#1{\let\@tempc=#1}
  591. %    \end{macrocode}
  592. % \end{macro} \end{macro} \end{macro} \end{macro}
  593. % \begin{macro}{\headcheck}
  594. %    \begin{macrocode}
  595. \def\headcheck#1#2\headcheck{%
  596.   \makethechar{#1}%
  597.   \def\theskipper{\vfil\penalty-100 % skip before new module
  598.     \vfilneg\vskip12ptminus3pt}%
  599.   \def\theopen{}% opening skip in toc entry
  600.   \def\thetocskip{}% vertical skip before toc entry
  601.   \def\themodtitle{{#2}}%
  602.   \def\headcheck@type{num}%
  603.   \ifnextchar={%
  604.     \def\theskipper{\newpage}  \canceltrue
  605.     \def\headcheck@type{part}       \def\theopen{\bf}%
  606.     \def\thetocskip{\vskip 3pt plus 1in \penalty-100 
  607.       \vskip \z@  plus -1in}% 
  608.     }{\ifnextchar1{%
  609.       \cancelfalse      \def\theskipper{\newpage}%
  610.       \def\theopen{\hskip2em}%
  611.     }{\ifnextchar2{%
  612.       \cancelfalse      \def\theopen{\hskip2em}%
  613.     }{\ifnextchar3{%
  614.       \cancelfalse      \def\theskipper{\newpage}%
  615.       \def\theopen{\hskip4em}%
  616.     }{\ifnextchar4{%
  617.       \cancelfalse      \def\theopen{\hskip4em}%
  618.     }{% else 
  619.       \ifcancel\else \def\theskipper{\newpage}\fi
  620.       \cancelfalse      \def\headcheck@type{norm}%
  621.       \def\themodtitle{#1{#2}}%
  622.     }}}}}%
  623.     \theskipper }
  624. %    \end{macrocode}
  625. % \end{macro}
  626. %    \subsubsection{Starting and ending code sections}
  627. % \begin{macro}{\code}
  628. % This takes us into code mode.  The old version used infinite hyphen
  629. % penalty which stopped the discretionary breaks in strings.  Extra
  630. % space is put after ";" with the "\sfcode". 
  631. %    \begin{macrocode}
  632. \newcommand{\code}{%
  633.   \rightskip=\z@  plus 100pt minus 10pt
  634.   \sfcode`;=3000    \pretolerance \@M
  635.   \hyphenpenalty 9999  \exhyphenpenalty \@M
  636.   \global\ind=2 \1 \startline
  637. %    \end{macrocode}
  638. % \DescribeMacro{\@}
  639. % The original says that every web must define "\?", where "?" is the
  640. % at-sign.  Since "\@" is used for end-of-sentence space in \LaTeX, we
  641. % make sure this is only done in code mode.  We need the old and new
  642. % definitions, "\old@" and "\code@", between which to switch.
  643. % \spider{} unfortunately uses "\S" instead of "\equiv" and the awk
  644. % and C \web s assume that "\%" and "\#" translate to typewriter
  645. % versions, so we have to define these properly in code mode too.
  646. % \DescribeMacro{\startcodehook} \DescribeMacro{\endcodehook}
  647. % For convenience, we define token registers
  648. % "\startcodehook" and "\endcodehook" for this sort of purpose when we
  649. % go into and out of code mode.  These might be altered by the
  650. % \spider\ description if appropriate.
  651. %    \begin{macrocode}
  652.   \startcodehook} % \def\code
  653. %    \end{macrocode}
  654. % \end{macro}
  655. % \begin{macro}{\old@}\begin{macro}{\code@}\begin{macro}{\old@S}
  656. % \begin{macro}{\old@percent} \begin{macro}{\old@hash}
  657. % Let's store the original definitions of these:
  658. %    \begin{macrocode}
  659. \let\old@=\@   \let\old@S=\S  \let\old@percent=\%  
  660. \let\old@hash=\#
  661. %    \end{macrocode}
  662. %    \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
  663. % \begin{macro}{\code@}\begin{macro}{\tt@percent}\begin{macro}{\tt@hash}
  664. % And here are replacements for use in code mode.
  665. %    \begin{macrocode}
  666. \chardef\code@=`\@  
  667. \def\tt@percent{\hbox{\tt\char`\%}}  \def\tt@hash{\hbox{\tt\char`\#}}
  668. %    \end{macrocode}
  669. % \end{macro}\end{macro}\end{macro}
  670. % \begin{macro}{\startcodehook}\begin{macro}{\endcodehook}
  671. % Here are the hooks.  Should these be token registers?
  672. %    \begin{macrocode}  
  673. \def\startcodehook{\let\@=\code@  \let\S=\equiv  \let\%=\tt@percent
  674.   \let\#=\tt@hash  \def\^{\hbox{\tt\char`\^}}}
  675. \def\endcodehook{\let\@=\old@  \let\S=\old@S  \let\%=\old@percent
  676.   \let\#=\old@hash  \def\^##1{{\accent94 ##1}}}
  677. %    \end{macrocode}
  678. %  \end{macro}\end{macro}
  679. % \begin{macro}{\Q}
  680. % This gets us out of code mode, setting things back to normal.
  681. %    \begin{macrocode}
  682. \def\Q{\rightskip=\z@   \sfcode`;=1500  \pretolerance 200  
  683.   \endcodehook}
  684. %    \end{macrocode}
  685. %    \end{macro}
  686. % \begin{macro}{\CD} \begin{macro}{\DC}
  687. % Web text in "|"\dots"|" is woven into text surrounded by
  688. % "\CD"\dots"\DC"\@.  The original definition didn't bother with the
  689. % grouping if not in math mode, but it's convenient now that the hooks
  690. % need to be added.
  691. %    \begin{macrocode}
  692. \def\DC{\endcodehook \egroup}
  693. \def\CD{\relax
  694.   \ifmmode \hbox\fi \bgroup \startcodehook}
  695. %    \end{macrocode}
  696. % \end{macro}\end{macro}
  697. % \begin{macro}{\U}
  698. % This provides a cross-reference for uses of sections.
  699. %    \begin{macrocode}
  700. \newcommand{\U}{\note{This code is used in}} 
  701. %    \end{macrocode}
  702. %    \end{macro}
  703. % \begin{macro}{\X}
  704. % This does modules which introduce the code.  Note the usage:
  705. % "\X"\meta{module number}":"\meta{module name}"\X".
  706. %    \begin{macrocode}
  707. \def\X#1:#2\X{%
  708.   \ifmmode \gdef\XX{\null$\null}\else \gdef\XX{}\fi
  709.   \XX$\langle\,$#2{\footnotesize \kern.5em #1}$\,\rangle$\XX }
  710. %    \end{macrocode}
  711. %    \end{macro}
  712. % \begin{macro}{\XF}
  713. % This is for a file module (from "@("):
  714. %    \begin{macrocode}
  715. \def\XF#1:#2\XF{%
  716.   \ifmmode \gdef\XX{\null$\null}\else \gdef\XX{}\fi
  717.   \XX {\tt (#2{\footnotesize \kern.5em #1})}\XX}
  718. %    \end{macrocode}
  719. %    \end{macro}
  720. % \begin{macro}{\Y} \begin{macro}{\yskip}
  721. % This does a vertical skip by "\yskip", used in "\note" and "\7".
  722. %    \begin{macrocode}
  723. \newcommand{\Y}{\par\yskip}
  724. \let\yskip=\smallskip
  725. %    \end{macrocode}
  726. %    \end{macro}\end{macro}
  727. %    
  728. % \subsection{Definitions and formats}
  729. % \begin{macro}{\D} \begin{macro}{\F} \begin{macro}{\defin}
  730. % "\D" and "\F" deal with macro and format definitions from "@d" and
  731. % "@f" respectively.
  732. %    \begin{macrocode}
  733. \newcommand{\D}{\defin{define}} % macro definition
  734. \newcommand{\F}{\defin{format}} % format definition
  735. \newcommand{\defin}[1]{\global\advance\ind by 2 \1\res{#1 }}
  736. %    \end{macrocode}
  737. %    \end{macro}\end{macro}\end{macro}
  738. % \subsection{Miscellaneous symbols}
  739. % \begin{macro}{\DO} \begin{macro}{\G} \begin{macro}{\I}
  740. % \begin{macro}{\K} \begin{macro}{\L} \begin{macro}{\R} 
  741. % \begin{macro}{\TI} \begin{macro}{\V} \begin{macro}{\W}
  742. % Here are some miscellaneous symbols.  I think these should really be
  743. % defined in the \spider\ descriptions that need them, but they are
  744. % assumed by the current webs.
  745. %    \begin{macrocode}
  746. \newcommand{\DO}{\hbox{\sl\char'044}}    % slant dollar sign (used by awkweb)
  747. \let\G=\ge                      % greater than or equal sign
  748. \let\I=\ne                      % unequal sign
  749. \let\K=\gets                    % left arrow
  750. \let\L=\le                      % less than or equal sign
  751. \let\R=\lnot                    % logical not
  752. \let\TI=\sim                    % tilde
  753. \let\V=\lor                     % logical or
  754. \let\W=\land                    % logical and
  755. %    \end{macrocode}
  756. %    \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
  757. %    \end{macro}\end{macro}\end{macro}
  758. % \begin{macro}{\vert} \begin{macro}{\amp} \begin{macro}{\PP}
  759. % \begin{macro}{\*} 
  760. % And some more:  (n.b., the plain \TeX{} definitions of "\vert"
  761. % and "\*" are over-written, as expected by spidery \weave---maybe this
  762. % should be changed).
  763. %    \begin{macrocode}
  764. \def\vert{|}   \let\amp=\&   \let\PP=\P   \let\*=*
  765. %    \end{macrocode}
  766. %    \end{macro}\end{macro}\end{macro}\end{macro}
  767. % \begin{macro}{\AT}
  768. % This is the `at sign in control
  769. % text'.  In the plain version it says "\def\AT!{@}" which I presume
  770. % is a mistake.
  771. %    \begin{macrocode}
  772. \def\AT{@}
  773. %    \end{macrocode} 
  774. %    \end{macro}
  775. % \subsection{Indexing}
  776. % \begin{macro}{\ch}
  777. % This is used trivially at the start of the index in the case of
  778. % changes: 
  779. %    \begin{macrocode} 
  780. \def\ch{\note{The following sections were changed by the change file:}
  781.   \let\*=\relax}
  782. %    \end{macrocode}
  783. %    \end{macro}
  784. % \begin{macro}{\inx} \begin{macro}{\:}
  785. % The index is set in two-column mode.
  786. % Each item in each index is introduced by "\:".  This is a \LaTeX{}
  787. % macro but is unlikely to get used in the index and so is preserved
  788. % from the original.
  789. %    \begin{macrocode}
  790. \def\inx{%
  791.   \typeout{Index:}
  792.   \begin{multicols}{2}
  793.   \parskip \z@  plus .5pt
  794.   \parfillskip \z@  plus .6\hsize % try to avoid almost empty lines
  795.   \outer\def\:##1, {\par\hangindent2em\noindent##1:\kern1em} % index entry
  796.   \rm  \tolerance \@M  \let\*=\lapstar
  797.   \hyphenpenalty \@M \parindent=\z@  }
  798. %    \end{macrocode}
  799. % \end{macro}\end{macro}
  800. %    \begin{macro}{\fin}
  801. % This finishes off the name index and starts off the module index.
  802. % "\:" acts as in "\inx".  The modules may be
  803. % qualified with "\U", which cross-references section uses.  The page
  804. % header is changed appropriately.
  805. %    \begin{macrocode}
  806. \def\fin{%
  807.   \end{multicols}  \newpage
  808.   \parfillskip \z@  plus 1fil
  809.   \markboth{{\protect\small NAMES OF THE SECTIONS}\hfill 
  810.       {\protect\small\@title}}
  811.     {{\protect\small\@title}\hfill
  812.     {\protect\small NAMES OF THE SECTIONS}}
  813.   \typeout{Section names:}
  814.   \def\note##1##2.{\quad{\footnotesize##1 ##2.}}
  815.   \def\U{\note{Used in}}%
  816.   \def\:{\par\hangindent 2em}\let\*=*}
  817. %    \end{macrocode}
  818. %    \end{macro}
  819. % \begin{macro}{\con}
  820. % This finishes everything off, rather trivially.  (It used to make
  821. % the contents page.)
  822. %    \begin{macrocode}
  823. \newcommand{\con}{\end{document}}
  824. %    \end{macrocode}
  825. %    \end{macro}
  826. % \subsection{Including other files}
  827. % \DescribeEnv{multicols}
  828. % We need the {\tt multicols} environment to make a two-column index
  829. % without a forced page break.
  830. %    \begin{macrocode}
  831. \input{multicol.sty}
  832. %    \end{macrocode}
  833. % \DescribeMacro{\webmacs}
  834. % Finally we include the macros defined by \spider.  Doing things this way
  835. % means that \spider{} can override things done in this file for the
  836. % \web{} system of a particular language (like the
  837. % definition of "\res", for instance) and the limbo section can do
  838. % further overriding for a particular web file.  If we're using this
  839. % file to document itself, "\webmacs" should have been defined in the
  840. % driver file to be "null"!
  841. %    \begin{macrocode}
  842. \input{\webmacs}
  843. %    \end{macrocode}
  844. % "\webmacs" is no further use and we might as well save the space.
  845. %    \begin{macrocode}
  846. \let\webmacs=\empty
  847. %    \end{macrocode}
  848. % \appendix
  849. % \section{Changes from the plain version}\label{changes}
  850. % \begin{description}
  851. % \item[{\tt \BS.}] becomes "\str";
  852. % \item[{\tt \BS\char`\^}] has been removed from the global
  853. % definitions (where it was assumed by the "c.spider" translation for
  854. % "^") and put in limbo in "weave.ch";
  855. % \item[{\tt \BS\%}, {\tt \BS\#} and {\tt \BS\$}] also removed from global
  856. % definitions and put in "\startcodehook"; 
  857. % \item[{\tt \BS AT!}] becomes "\AT" on the assumption that
  858. % the original was an error;
  859. % \item[{\tt \BS\char`\~}] removed globally since it doesn't seem to be used;
  860. % \item[{\tt \BS\BS} and {\tt \BS|}] become "\id" and "\ida" respectively;
  861. % \item[{\tt \BS\&}] becomes "\res";
  862. % \item[{\tt \BS B} and {\tt \BS T}] (for controlled comments) removed
  863. % since no controlled comments in \spider;
  864. % \item[{\tt \BS)}] (string pool check sum) removed;
  865. % \item[{\tt \BS]}] (sign for forced line break) appears not be be
  866. % used, so removed;
  867. % \item[{\tt \BS=}] becomes "\vstr";
  868. % \item[{\tt \BS H}] (hat) removed since it seems not to be used and
  869. % clashes with \LaTeX;
  870. % \item[{\tt \BS Z}] replaced by \LaTeX{} contents stuff;
  871. % \item[{\tt \BS lheader} and {\tt \BS rheader}] replaced by \LaTeX{} marks;
  872. % \item[output routine stuff] all gone;
  873. % \item[{\tt \BS rhead}] no longer relevant---use the \LaTeX{} mark
  874. % mechanism; 
  875. % \item[{\tt \BS title}] should be called as a macro with the title as
  876. % its argument rather than "\def"ed; 
  877. % \item[{\tt \BS contentspagenumber}, {\tt \BS contentsfile} and {\tt
  878. % \BS readcontents}] no longer relevant;
  879. % \item[{\tt \BS pagewidth}, {\tt \BS pageheight} and {\tt \BS
  880. % fullpageheight}] no longer relevant---use the \LaTeX\ equivalents;
  881. % \item[{\tt \BS pageshift}] no longer relevant---use "twoside" option;
  882. % \item[verbatim macros] no longer relevant;
  883. % \item[{\tt \BS iftitle}] removed---use "\pagestyle{empty}" to
  884. % suppress page header.
  885. % \end{description}
  886. % \begin{thebibliography}{1}
  887. % \bibitem{spider} N. Ramsey, {\sl Comm. ACM}, {\bf 32} (1989) 1051
  888. % \end{thebibliography}
  889.